目标检测算法 YOLOv8 原理解析|包揽目标检测、实例分割 SOTA

您所在的位置:网站首页 yolo 分割 与 检测 目标检测算法 YOLOv8 原理解析|包揽目标检测、实例分割 SOTA

目标检测算法 YOLOv8 原理解析|包揽目标检测、实例分割 SOTA

2024-01-26 10:20| 来源: 网络整理| 查看: 265

文章目录 YOLOv8算法简介YOLOv8 概述YOLOv8算法特点YOLOv8 网络模型结构图YOLOv8 网络模型结构设计YOLOv8 效果YOLOv8 和 YOLOv5 之间的综合比较YOLOv8 和 YOLOv5 目标检测模型对比 YOLOv8 Loss 计算YOLOv8 训练策略YOLOv8 算法总结

YOLOv8算法简介

请添加图片描述 YOLOv8作者:glenn-jocher 项目链接:https://github.com/ultralytics/ultralytics

YOLO 是一种基于图像全局信息进行预测的目标检测系统。自 2015 年 Joseph Redmon、Ali Farhadi 等人提出初代模型以来,领域内的研究者们已经对 YOLO 进行了多次更新迭代,模型性能越来越强大。现在,YOLOv8 已正式发布。

YOLOv8 是由小型初创公司 Ultralytics 创建并维护的,值得注意的是 YOLOv5 也是由该公司创建的。

注:由于 YOLOv8 和 YOLOv5 属于同一个作者glenn-jocher,均在🔗 YOLOAir库 中有集成,所以YOLOv5、YOLOv7、YOLOv8等模型 使用 芒果改进YOLO系列完全通用,不需要额外操作。

🚀在YOLOv7中结合YOLOv8的梯度流信息模块(C2f): 👉:改进YOLOv7系列:结合丰富的梯度流信息模块,来自YOLOv8的核心模块

🚀芒果汁没有芒果改进YOLO全系列目录: 👉:芒果改进目录一览|原创改进YOLOv5、YOLOv7、YOLOv8等YOLO模型全系列目录(推荐)

YOLOv8 概述

YOLOv8 算法的核心特性和改动可以归结为如下:

提供了一个全新的 SOTA 模型,包括 P5 640 和 P6 1280 分辨率的目标检测网络和基于 YOLACT 的实例分割模型。和 YOLOv5 一样,基于缩放系数也提供了 N/S/M/L/X 尺度的不同大小模型,用于满足不同场景需求骨干网络和 Neck 部分可能参考了 YOLOv7 ELAN 设计思想,将 YOLOv5 的 C3 结构换成了梯度流更丰富的 C2f 结构,并对不同尺度模型调整了不同的通道数,属于对模型结构精心微调,不再是无脑一套参数应用所有模型,大幅提升了模型性能。不过这个 C2f 模块中存在 Split 等操作对特定硬件部署没有之前那么友好了Head 部分相比 YOLOv5 改动较大,换成了目前主流的解耦头结构,将分类和检测头分离,同时也从 Anchor-Based 换成了 Anchor-FreeLoss 计算方面采用了 TaskAlignedAssigner 正样本分配策略,并引入了 Distribution Focal Loss

从上面可以看出,YOLOv8 主要参考了最近提出的诸如 YOLOX、YOLOv6、YOLOv7 和 PPYOLOE 等算法的相关设计,本身的创新点不多,偏向工程实践,主推的还是 ultralytics 这个框架本身。

下面将按照模型结构设计、Loss 计算、训练数据增强、训练策略和模型推理过程共 5 个部分详细介绍 YOLOv8 目标检测的各种改进,实例分割部分暂时不进行描述。

YOLOv8算法特点

YOLOv8 的主要具有以下特点:

对用户友好的 API(命令行 + Python);模型更快更准确;模型能完成目标检测、实例分割和图像分类任务;与先前所有版本的 YOLO 兼容可扩展;模型采用新的网络主干架构;无锚(Anchor-Free)检测;模型采用新的损失函数。 YOLOv8 网络模型结构图 YOLOv8-P5_structure 图 1:YOLOv8-P5 模型结构

以上结构图由 RangeKing@github 绘制。

YOLOv8 网络模型结构设计

模型完整图示可以看图 1。

在暂时不考虑 Head 情况下,对比 YOLOv5 和 YOLOv8 的 yaml 配置文件可以发现改动较小。

yaml 图 3:YOLOv5 和 YOLOv8 YAML 文件对比

左侧为 YOLOv5-s,右侧为 YOLOv8-s

骨干网络和 Neck 的具体变化为:

第一个卷积层的 kernel 从 6x6 变成了 3x3所有的 C3 模块换成 C2f,结构如下所示,可以发现多了更多的跳层连接和额外的 Split 操作 module 图 4:YOLOv5 和 YOLOv8 模块对比 去掉了 Neck 模块中的 2 个卷积连接层Backbone 中 C2f 的 block 数从 3-6-9-3 改成了 3-6-6-3查看 N/S/M/L/X 等不同大小模型,可以发现 N/S 和 L/X 两组模型只是改了缩放系数,但是 S/M/L 等骨干网络的通道数设置不一样,没有遵循同一套缩放系数。如此设计的原因应该是同一套缩放系数下的通道设置不是最优设计,YOLOv7 网络设计时也没有遵循一套缩放系数作用于所有模型

Head 部分变化最大,从原先的耦合头变成了解耦头,并且从 YOLOv5 的 Anchor-Based 变成了 Anchor-Free。其结构如下所示:

head 图 5:YOLOv8 Head 结构

可以看出,不再有之前的 objectness 分支,只有解耦的分类和回归分支,并且其回归分支使用了 Distribution Focal Loss 中提出的积分形式表示法。

YOLOv8 效果

YOLOv8 和 YOLOv5 之间的综合比较

在这里插入图片描述

YOLOv8 和 YOLOv5 目标检测模型对比

在这里插入图片描述

YOLOv8 是一个 SOTA 模型,它建立在以前 YOLO 版本的成功基础上,并引入了新的功能和改进,以进一步提升性能和灵活性。具体创新包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行。 不过 Ultralytics 并没有直接将开源库命名为 YOLOv8,而是直接使用 Ultralytics 这个词,原因是 Ultralytics 将这个库定位为算法框架,而非某一个特定算法,一个主要特点是可扩展性。 总而言之,Ultralytics 开源库的两个主要优点是:

融合众多当前 SOTA 技术于一体未来将支持其他 YOLO 系列以及 YOLO 之外的更多算法 YOLOv8-table 图 2:YOLOv8 性能曲线

下表为官方在 COCO Val 2017 数据集上测试的 mAP、参数量和 FLOPs 结果。可以看出 YOLOv8 相比 YOLOv5 精度提升非常多,但是 N/S/M 模型相应的参数量和 FLOPs 都增加了不少,从上图也可以看出相比 YOLOV5 大部分模型推理速度变慢了。

模型YOLOv5params(M)FLOPs@640 (B)YOLOv8params(M)FLOPs@640 (B)n28.0(300e)1.94.537.3 (500e)3.28.7s37.4 (300e)7.216.544.9 (500e)11.228.6m45.4 (300e)21.249.050.2 (500e)25.978.9l49.0 (300e)46.5109.152.9 (500e)43.7165.2x50.7 (300e)86.7205.753.9 (500e)68.2257.8

额外提一句,现在各个 YOLO 系列改进算法都在 COCO 上面有明显性能提升,但是在自定义数据集上面的泛化性还没有得到广泛验证,至今依然听到不少关于 YOLOv5 泛化性能较优异的说法。

YOLOv8 Loss 计算

Loss 计算过程包括 2 个部分: 正负样本分配策略和 Loss 计算。 现代目标检测器大部分都会在正负样本分配策略上面做文章, YOLOv5 采用的依然是静态分配策略。考虑到动态分配策略的优异性,YOLOv8 算法中则直接引用了 TOOD 的 TaskAlignedAssigner。 TaskAlignedAssigner 的匹配策略简单总结为: 根据分类与回归的分数加权的分数选择正样本。

t = s α + u β t=s^\alpha+u^\beta t=sα+uβ : s 是标注类别对应的预测分值,u 是预测框和 gt 框的 iou,两者相乘就可以衡量对齐程度。

对于每一个 GT,对所有的预测框基于 GT 类别对应分类分数,预测框与 GT 的 IoU 的加权得到一个关联分类以及回归的对齐分数 alignment_metrics对于每一个 GT,直接基于 alignment_metrics 对齐分数选取 topK 大的作为正样本

Loss 计算包括 2 个分支: 分类和回归分支,没有了之前的 objectness 分支。

分类分支依然采用 BCE Loss回归分支需要和 Distribution Focal Loss 中提出的积分形式表示法绑定,因此使用了 Distribution Focal Loss, 同时还使用了 CIoU Loss3 个 Loss 采用一定权重比例加权即可。 YOLOv8 训练策略

YOLOv8 的训练策略和 YOLOv5 没有啥区别,最大区别就是模型的训练总 epoch 数从 300 提升到了 500,这也导致训练时间急剧增加。以 YOLOv8-S 为例,其训练策略汇总如下:

配置YOLOv8-s P5 参数optimizerSGDbase learning rate0.01Base weight decay0.0005optimizer momentum0.937batch size128learning rate schedulelineartraining epochs500warmup iterationsmax(1000,3 * iters_per_epochs)input size640x640EMA decay0.9999 YOLOv8 算法总结

本文详细分析和总结了最新的 YOLOv8 算法,从整体设计到模型结构、Loss 计算进行了详细的说明,并提供了大量的示意图供大家方便理解。 简单来说 YOLOv8 是一个包括了图像分类、Anchor-Free 物体检测和实例分割的高效算法,检测部分设计参考了目前大量优异的最新的 YOLO 改进算法,实现了新的 SOTA。

参考来源

机器之心:https://mp.weixin.qq.com/s/QuzjUsq7niNiP8PYGyMpUA MMYOLO关于YOLOv8算法解析教程:https://github.com/open-mmlab/mmyolo



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3